package com.tdam2011.grupo06.model;

import android.text.format.DateFormat;

import java.util.Calendar;
import java.util.Comparator;
import java.util.Date;

import android.app.Activity;
import android.graphics.drawable.Drawable;

public abstract class ItemHistorial
{
	protected int tipo;
	protected int id;
	protected int idContacto;
	protected Date fecha;
	protected String numero;
	protected String nombre;

	/**
	 * 
	 * @param i ID
	 * @param ic Contact ID
	 * @param ti Type
	 * @param f Date
	 * @param n Contact Number
	 * @param no Contact Name
	 */
	public ItemHistorial(int i, int ic, int ti, Date f, String n, String no)
	{
		id = i;
		idContacto = ic;
		tipo = ti;
		fecha = f;
		numero = n;
		nombre = no;
	}
	
	public ItemHistorial()
	{
		id = 0;
		idContacto = 0;
		tipo = 0;
		fecha = new Date();
		numero = "";
		nombre = "";
	}
	
	public int getId() {
		return id;
	}

	public void setIdContacto(int ic) {
		this.idContacto = ic;
	}
	
	public int getIdContacto() {
		return idContacto;
	}

	public void setId(int i) {
		this.id = i;
	}
	
	public int getTipo()
	{
		return tipo;
	}

	public void setTipo(int tipo) {
		this.tipo = tipo;
	}
	
	public Date getFecha() {
		return fecha;
	}

	public void setFecha(Date fecha) {
		this.fecha = fecha;
	}
	
	public String getNumero() {
		return numero;
	}

	public void setNumero(String numero) {
		this.numero = numero;
	}
	
	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public String getFechaString() 
	{
		return (String) DateFormat.format("kk:mm dd-MM-yyyy",fecha);
	}
	
	public abstract Drawable getTipoDrawable(Activity caller);
	
	public static Comparator<ItemHistorial> comparadorFechaAsc = new Comparator<ItemHistorial>()
	{
		public int compare(ItemHistorial thisOne, ItemHistorial another) 
		{
			Calendar este = Calendar.getInstance();
			este.setTime(thisOne.fecha);
			Calendar otro = Calendar.getInstance();
			otro.setTime(another.fecha);
			return este.compareTo(otro);
		}
	};
	
	public static Comparator<ItemHistorial> comparadorFechaDesc = new Comparator<ItemHistorial>()
	{
		public int compare(ItemHistorial thisOne, ItemHistorial another) 
		{
			Calendar este = Calendar.getInstance();
			este.setTime(thisOne.fecha);
			Calendar otro = Calendar.getInstance();
			otro.setTime(another.fecha);
			return otro.compareTo(este);
		}
	};
	
	public static Comparator<ItemHistorial> comparadorNombreAsc = new Comparator<ItemHistorial>()
	{
		public int compare(ItemHistorial thisOne, ItemHistorial another) 
		{
			return another.nombre.compareTo(thisOne.nombre);
		}
	};
	
	public static Comparator<ItemHistorial> comparadorNombreDesc = new Comparator<ItemHistorial>()
	{
		public int compare(ItemHistorial thisOne, ItemHistorial another) 
		{
			return thisOne.nombre.compareTo(another.nombre);
		}
	};
	
	public static Comparator<ItemHistorial> comparadorTipoAsc = new Comparator<ItemHistorial>()
	{
		public int compare(ItemHistorial thisOne, ItemHistorial another) 
		{
			if(thisOne instanceof Mensaje && another instanceof Mensaje)
			{
				return ((Mensaje)another).getSubtipo()-((Mensaje)thisOne).getSubtipo();
			}
			return another.getClass().getName().compareTo(thisOne.getClass().getName());
		}
	};
	
	public static Comparator<ItemHistorial> comparadorTipoDesc = new Comparator<ItemHistorial>()
	{
		public int compare(ItemHistorial thisOne, ItemHistorial another) 
		{
			if(thisOne instanceof Mensaje && another instanceof Mensaje)
			{
				return ((Mensaje)thisOne).getSubtipo()-((Mensaje)another).getSubtipo();
			}
			return thisOne.getClass().getName().compareTo(another.getClass().getName());
		}
	};
}
